defmodule IocpMonitor.Client.Supervisor do
  @moduledoc """
  客户端监护进程定义模块。
  该模块为动态监护者模块，
  每当一个客户端（电流盒子）连接至服务器时，
  动态创建一个被监护进程，被监护进程的定义模块为`IocpMonitor.Worker.Supervisor`。
  """

  use DynamicSupervisor

  def start_link(_) do
    DynamicSupervisor.start_link(__MODULE__, nil, name: __MODULE__)
  end

  @impl true
  def init(_) do
    DynamicSupervisor.init(strategy: :one_for_one)
  end

  def start_child(client) do
    DynamicSupervisor.start_child(__MODULE__, {IocpMonitor.Worker.Supervisor, client})
  end

  def terminate_child(pid_chars) when is_list(pid_chars) do
    pid_chars
    |> :erlang.list_to_pid()
    |> terminate_child()
  end

  def terminate_child(pid) when is_pid(pid) do
    DynamicSupervisor.terminate_child(__MODULE__, pid)
  end
end
